//
//  JHOAuthViewController.swift
//  JHSinaWeibo
//
//  Created by apple on 16/5/29.
//  Copyright © 2016年 apple. All rights reserved.
//  用户账户的视图模型

/*
 1.封装网络请求
 2.存储网络数据
 3.对外界提供本地存储的用户数据
 */

 import UIKit
//偏好设置保存数据
private let userInfoKey = "com.itheima.userInfoKey"

class JHUserAccountModel:NSObject{
//单例对象 ，伪单例
    static let sharedAccountViewModel : JHUserAccountModel = JHUserAccountModel()
    var userAccount : JHUserAccount?
    
    //重写构造方法，在构造方法中 加载用户的账户模型
   private override init() {
        super.init()
    userAccount = loadUserAccount()
    }
    //通过一判断用户是否登录的计算型属性 来解决 每次都需要判断的问题
    //计算型属性 每次调用都会执行
    var userLogin: Bool{
        if userAccount?.expires_date?.compare(NSDate()) == .OrderedDescending {
            return true
        }
    //如果过期 需要讲userAccount设置为nil
        userAccount = nil
        return false
    
    }
    //增加一个用户头像地址 纯种nsurl地址
    //只读属性 特点：每次执行都会进行计算
    var headURL:NSURL{
        get {
            return NSURL(string: userAccount?.avatar_large ?? "")!
        }
    
    }

}
extension JHUserAccountModel{
        //使用code 加载用户授权的token（登录令牌）
    func loadAccessToken(code:String,finished:(isSuccess:Bool)->() ){
        JHNetWorkTools.sharedTool.loadAccessToken(code) { (responseObject, error) in
           // 请求token成功之后 使用token和uid获取用户信息
                            if error != nil {
                            //SVProgressHUD.showErrorWithStatus("亲爱的没有网啦")
                                finished(isSuccess: false)
                            return
                            }
                            //请求成功
                            self.loadUserInfo(responseObject,finished:finished)
        }
        
//            let urlString = "https://api.weibo.com/oauth2/access_token"
//            let parameters = ["client_id" :client_id,"client_secret":client_secret,"grant_type":"authorization_code","code":code,"redirect_uri":redirect_uri]
//    
//            JHNetWorkTools.sharedTool.request(.POST, urlString: urlString, parameters: parameters){(responseObject,error) in
//               print(responseObject,error)
    //            请求token成功之后 使用token和uid获取用户信息
//                if error != nil {
//                //SVProgressHUD.showErrorWithStatus("亲爱的没有网啦")
//                    finished(isSuccess: false)
//                return
//                }
//                //请求成功
//                self.loadUserInfo(responseObject,finished:finished)
            //}
        }
        //请求用户信息
        private func loadUserInfo(response:AnyObject?,finished:(isSuccess:Bool)->()) {
          guard  let result = response as? [String : AnyObject] else {
           // SVProgressHUD.showErrorWithStatus("亲爱的没有网啦")
            //回调自定义错误
            finished(isSuccess: false)
                return
            }
            
            JHNetWorkTools.sharedTool.loadUserInfo(
            result) { (responseObject, error) in
                if error != nil {
                    
                finished(isSuccess: false)
                    return
                }
                //请求成功
                guard var dict = responseObject as? [String : AnyObject] else {
                    //                SVProgressHUD.showErrorWithStatus("世界上最遥远的距离就是没有网")
                    finished(isSuccess: false)
                    return
                }

                
                for (key,value) in result {                dict[key] = value
                }
                self.saveUserAccount(dict)
                finished(isSuccess: true)
            }

                

//            let token = result["access_token"]!
//            let uid = result["uid"]!
//    
//            let urlString = "https://api.weibo.com/2/users/show.json"
//    
//            let parameters = ["access_token":token,"uid":uid]
//            JHNetWorkTools.sharedTool.request(.GET, urlString: urlString, parameters: parameters) { (responseObject, error) in
//                if error != nil {
//               // SVProgressHUD.showErrorWithStatus("亲爱的没有网啦")
//                    finished(isSuccess: false)
//                    return
//                }
                //请求成功
//             guard var dict = responseObject as? [String :AnyObject] else{
//                //SVProgressHUD.showErrorWithStatus("亲爱的没有网啦")
//                finished(isSuccess: false)
//                    return
//                }
//    //            用户信息应该保存用户信息到本地
//                //合并两个字典，统一保存用户数据到本地
//    //                //1.将dict转换为模型对象
//                let user = JHUserAccount(dict:dict)
//                //2.将模型对象转换为字典
//                let keys = ["access_token","expires_in","uid","name","avatar_large"]
//          let userInfo = user.dictionaryWithValuesForKeys(keys)
//                print("userInfo")
                //3.获取字典数据
//                //使用偏好设置 保存字典数据
//                            let userDefaults = NSUserDefaults.standardUserDefaults()
//                            //不能够向偏好设置中保存nil
//                            userDefaults.setObject(userInfo, forKey: userInfoKey)
//                //同步
//                userDefaults.synchronize()
//                print(NSHomeDirectory())
// 
                

    }
}
//存取数据
extension JHUserAccountModel{

//存储数据
    func saveUserAccount(dict:[String:AnyObject ]){
    
        //1. 将dict 转换为 模型对象
        let user = JHUserAccount(dict: dict)
        self.userAccount = user
        //2. 将模型对象转换字典
        let keys = ["access_token","expires_in","uid","name","avatar_large","expires_date"]
        let userInfo = user.dictionaryWithValuesForKeys(keys)
        print(userInfo)
        //3. 保存字典数据
        let userDefaults = NSUserDefaults.standardUserDefaults()
        //不能够向 偏好设置中保存 nil
        userDefaults.setObject(userInfo, forKey: userInfoKey)
        //同步
        userDefaults.synchronize()
        
        print(NSHomeDirectory())
    }
    //获取数据
    func loadUserAccount() -> JHUserAccount?{
        //如果使用as!在偏好设置并没有保存数据的时候 程序会崩溃
        guard let dict = NSUserDefaults.standardUserDefaults().objectForKey(userInfoKey) as? [String:AnyObject] else{
            
            return nil
        }
        //字典转模型
        //判断是否过期
        
        let user = JHUserAccount(dict: dict)
        
        
        return user
    }
}

